{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 03 Drake中的多体平台Multibody\n",
    "\n",
    "Multibody是Drake的一个亮点。\n",
    "它使用刚体树表示机器人。\n",
    "同时，MultibodyPlant还包含一些API，可以对机器人的运动学、动力学和雅克比矩阵进行计算。\n",
    "\n",
    "【作者建议度Drake文档中关于Multibody的内容】\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 机器人建模\n",
    "\n",
    "### 创建多体平台\n",
    "\n",
    "创建多体机器人平台最好的办法是分析机器人描述文件，如URDF或SDF。\n",
    "Drake可以使用parser读取URDF或SDF。\n",
    "\n",
    "创建机器人的另一种方法是通过MultibodyPlant的API。\n",
    "但这通常对应简单模型。\n",
    "\n",
    "### 注意一些Drake的特性\n",
    "\n",
    "注意Drake不支持在几何碰撞中使用mesh文件。\n",
    "也就是说，如果需要仿真碰撞，用户需要创建自己的碰撞模型。通常是包裹住mesh文件中几何形状的简单几何体。\n",
    "（我发现使用Rviz来添加碰撞模型是更方便的，因为Rviz可以显示碰撞几何体）\n",
    "\n",
    "如果用户要从ROS中移植机器人，其中的URDF文件很可能使用包来找到mesh文件，而不是用相对路径。\n",
    "Drake支持“包”的概念，但是，用户需要将对应的文件夹编程一个包。\n",
    "也就是说，用户要在包中提供一个package.xml文件，还要修改BUILD.bazel文件使bazel认识这个包。\n",
    "另外，在代码中，package.xml文件的路径要指定，这样Drake就可以找到这个包了。\n",
    "\n",
    "### Drake在分析文件时做了什么？\n",
    "\n",
    "### 移动器\n",
    "\n",
    "Drake使用Mobilizer来连接两个连杆，这与传统的Joint不同。\n",
    "\n",
    "### 模型实例索引ModelInstanceIndex\n",
    "\n",
    "ModelInstanceIndex是机器人的ID。\n",
    "机器人框图只能有一个MultibodyPlant。\n",
    "因此用户如果有多个机器人，就要使用ModelInstanceIndex。\n",
    "MultibodyPlant中的每个元素，如连杆、关节等，都有一个ModelInstanceIndex。\n",
    "\n",
    "ModelInstanceIndex 0是世界。\n",
    "它只有一个物体，也就是world_body，具有参数BodyIndex为0。\n",
    "\n",
    "ModelInstanceIndex 1包括了由Drake的API创建的物体。\n",
    "\n",
    "对每个从SDF/URDF文件中加载的机器人，Drake都会创建独立的ModelInstanceIndex。\n",
    "\n",
    "![](./images/ImagefromiOS.jpg)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 运动学\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
